// 云函数入口文件   模版id：FjvVLdPWxHONyFtFa5cqCknQX8Lex-R0cqVyGnSDHUY
const cloud = require('wx-server-sdk');
cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV });

// 云函数入口函数
exports.main = async (event, context) => {
  console.log('[提醒设置] 开始执行云函数，接收参数:', JSON.stringify(event));
  console.log('[提醒设置] 上下文信息:', JSON.stringify(context));
  
  const { courseId, courseName, startTime, classroom, reminderTime, teacherId, weekday } = event;
  const db = cloud.database();
  
  try {
    console.log('[提醒设置] 步骤1: 开始获取教师openid, teacherId:', teacherId);
    // 获取教师的openid
    const teacherInfo = await db.collection('teachers').doc(teacherId).get();
    console.log('[提醒设置] 教师信息获取结果:', JSON.stringify(teacherInfo.data));
    
    const openid = teacherInfo.data.openid || context.OPENID;
    console.log('[提醒设置] 使用的openid:', openid);
    
    // 计算提醒时间
    console.log('[提醒设置] 步骤2: 开始计算课程时间, 课程开始时间:', startTime);
    const courseDateTime = calculateCourseDateTime(startTime);
    console.log('[提醒设置] 计算的课程日期时间:', courseDateTime);
    
    console.log('[提醒设置] 步骤3: 开始计算提醒时间, 提前时间:', reminderTime);
    const reminderDateTime = calculateReminderTime(courseDateTime, reminderTime);
    console.log('[提醒设置] 计算的提醒时间:', reminderDateTime);
    
    // 构建要保存的数据
    const reminderData = {
      courseId,
      courseName,
      classroom,
      startTime,
      reminderTime,
      teacherId,
      openid,
      reminderDateTime,
      status: 'pending',
      createTime: db.serverDate(),
      weekday: weekday ? parseInt(weekday) : null
    };
    
    console.log('[提醒设置] 步骤4: 准备保存到数据库的数据:', JSON.stringify(reminderData));
    
    // 保存提醒任务到数据库
    console.log('[提醒设置] 步骤5: 开始保存提醒任务到数据库');
    const result = await db.collection('reminders').add({
      data: reminderData
    });
    
    console.log('[提醒设置] 数据库保存结果:', JSON.stringify(result));
    
    return {
      success: true,
      reminderId: result._id,
      message: '提醒设置成功',
      reminderData: reminderData
    };
  } catch (err) {
    console.error('[提醒设置] 设置提醒失败:', err);
    return {
      success: false,
      error: err,
      message: '提醒设置失败: ' + (err.message || JSON.stringify(err))
    };
  }
};

// 计算课程日期时间
function calculateCourseDateTime(timeString) {
  console.log('[提醒设置] 计算课程时间，输入时间字符串:', timeString);
  
  try {
    const now = new Date();
    console.log('[提醒设置] 当前日期:', now);
    
    const [hours, minutes] = timeString.split(':').map(Number);
    console.log('[提醒设置] 解析的小时:', hours, '分钟:', minutes);
    
    const courseDate = new Date(
      now.getFullYear(),
      now.getMonth(),
      now.getDate(),
      hours,
      minutes,
      0
    );
    
    console.log('[提醒设置] 计算得到的课程日期时间:', courseDate);
    return courseDate;
  } catch (error) {
    console.error('[提醒设置] 计算课程时间出错:', error);
    throw new Error('计算课程时间失败: ' + error.message);
  }
}

// 计算提醒时间
function calculateReminderTime(courseDateTime, reminderTimeString) {
  console.log('[提醒设置] 计算提醒时间，课程时间:', courseDateTime, '提醒设置:', reminderTimeString);
  
  try {
    const reminderDateTime = new Date(courseDateTime);
    
    // 解析提醒时间字符串，如"1小时"、"30分钟"
    const match = reminderTimeString.match(/(\d+)(\D+)/);
    console.log('[提醒设置] 解析提醒时间字符串结果:', match);
    
    if (match) {
      const value = parseInt(match[1]);
      const unit = match[2];
      console.log('[提醒设置] 解析的数值:', value, '单位:', unit);
      
      if (unit.includes('小时')) {
        reminderDateTime.setHours(reminderDateTime.getHours() - value);
        console.log('[提醒设置] 提前小时数:', value);
      } else if (unit.includes('分钟')) {
        reminderDateTime.setMinutes(reminderDateTime.getMinutes() - value);
        console.log('[提醒设置] 提前分钟数:', value);
      }
    } else {
      console.warn('[提醒设置] 无法解析提醒时间字符串:', reminderTimeString);
    }
    
    console.log('[提醒设置] 计算得到的提醒时间:', reminderDateTime);
    return reminderDateTime;
  } catch (error) {
    console.error('[提醒设置] 计算提醒时间出错:', error);
    throw new Error('计算提醒时间失败: ' + error.message);
  }
}